package com.lft.juc04.unsafecollection;

import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;

/**
 * java.util.ConcurrentModificationException 并发修改异常
 */
public class UnsafeMap {
	public static void main(String[] args) {
		// 并发下，HashMap 不安全
		/**
		 * 解决方案：
		 * 1. 使用集合工具类的转换成线程安全的集合。Map<String, String> map = Collections.synchronizedMap(new HashMap<>());
		 * 2. 使用JUC包下的并发集合类。Map<String, String> map = new ConcurrentHashMap<>();
		 */
		// 不安全的集合
		// Map<String, String> map = new HashMap<>();
		// 安全1（效率低）
		// Map<String, String> map = new Hashtable<>();
		// 安全2（效率低）
		// Map<String, String> map = Collections.synchronizedMap(new HashMap<>());
		// 安全3
		Map<String, String> map = new ConcurrentHashMap<>();
		
		for (int i = 1; i <= 30; i++) {
			new Thread(() -> {
				map.put(Thread.currentThread().getName(), UUID.randomUUID().toString().substring(0, 5));
				System.out.println(map);
			}, String.valueOf(i)).start();
		}
	}
}
